home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Online / SpeakFreely / src / lpc10 / drivers.h < prev    next >
C/C++ Source or Header  |  2000-05-18  |  6KB  |  153 lines

  1. #ifndef _DRIVERS_
  2. #define _DRIVERS_
  3.  
  4. #include <std.h>
  5.  
  6. /* data structure type define for TLC32044 registers */
  7. typedef struct 
  8. {
  9.     Uns        ra;
  10.     Uns        rb;
  11.     Uns        ta;
  12.     Uns        tb;
  13.     Uns        taP;
  14.     Uns        raP;
  15.     Uns        control;    
  16. } TLC_Regs;
  17.  
  18. /* data structure type define for AIC driver Isr data object */    
  19. typedef struct
  20. {
  21.     Uns        size;        /* length of buffers                    */
  22.     Uns        count;        /* number of samples in current buffer    */
  23.     Ptr        present;    /* pointer to 'current' working buffer    */
  24.     Ptr        next;        /* pointer to next avalible free buffer    */
  25.     Bool    swap;        /* buffer swap flag (signal get/put)    */
  26.     Uns        *xfer_reg;    /* C3x data tx or data rx register        */
  27.     Uns     isr_count;  /* interrupt counter                    */
  28. } AIC_IsrObj;
  29.  
  30. /* data structure type define for AIC driver user paramsters data object */
  31. typedef struct
  32. {
  33.     Bool        sync_isr;        /* bool for common tx and rx isr's        */
  34.     Bool        tx_only;        /* bool for only using tx opperations    */
  35.     Bool        rx_only;        /* bool for only using rx opperations    */
  36.     Uns            chan_id;        /* which AIC channel is being used        */
  37.     Uns            tx_size;        /* size of buffers to put                */
  38.     Uns            rx_size;        /* size of buffers to get                */
  39.     TLC_Regs    aic_regs;        /* TLC32044 registers data structure    */
  40. } AIC_Attrs;
  41.  
  42. /* data structure type define for AIC driver data object */
  43. typedef struct
  44. {
  45.     Uns            port;            /* which C3x serail port is being used    */
  46.     Uns            rx_mask;        /* rx interrupt ie mask value            */    
  47.     Uns            tx_mask;        /* tx interrupt ie mask value            */
  48.     Bool        tx_first;        /* flag for first call to AIC_get()        */
  49.     Bool        rx_first;        /* flag for first call to AIC_put()        */
  50.     AIC_Attrs    attrs;            /* user configurable parameters            */ 
  51.     AIC_IsrObj    rx_obj;            /* rx Isr data structure                */
  52.     AIC_IsrObj    tx_obj;            /* tx Isr data structure                */
  53.     AIC_IsrObj    *both_obj[2];    /* sync_isr tx/rx Isr data structure    */
  54. } AIC_DriverObj;
  55. typedef AIC_DriverObj *AIC_Driver;
  56.  
  57. /* data structure type define for C3x serial port registers */
  58. typedef struct
  59. {
  60.     Uns        control;    /* global control                  */
  61.     Uns        space1;        /* C3x reserved space            */
  62.     Uns        tx_ctrl;    /* FSX/DX/CLKX port control     */
  63.     Uns        rx_ctrl;    /* FSR/DR/CLKR port control        */
  64.     Uns        time_ctrl;    /* R/X timer control            */
  65.     Uns        time_cnt;    /* R/X timer count                */
  66.     Uns        time_perd;    /* R/X timer period                */
  67.     Uns        space2;        /* C3x reserved space            */
  68.     Uns        dtr;        /* data transmit register        */
  69.     Uns        space3;        /* C3x reserved space            */
  70.     Uns        space4;        /* C3x reserved space            */
  71.     Uns        space5;        /* C3x reserved space            */
  72.     Uns        drr;        /* data receive register        */        
  73. } SER_Regs;
  74.  
  75. /* data structure type define for serial port driver Isr data object */    
  76. typedef struct
  77. {
  78.     Uns            size;        /* length of buffers                    */
  79.     Uns            count;        /* number of samples in current buffer    */
  80.     Ptr            present;    /* pointer to 'current' working buffer    */
  81.     Ptr         next;        /* pointer to next avalible free buffer    */
  82.     Bool        swap;        /* buffer swap flag (signal get/put)    */
  83.     Uns            *xfer_reg;    /* C3x data tx or data rx register        */
  84.     Uns         isr_count;  /* interrupt counter                    */
  85.     Uns         isr_size;   /* SER frame count for clock comp       */
  86.     Uns         isr_length; /* # num of int's to check for clk cmp  */
  87.     AIC_IsrObj  *aic_obj;   /* pointer to aic isr obj for clock cmp */
  88.     Uns            mask;       /* tx/rx interrupt ie mask value        */
  89.     Uns            buff_aval;    /* next tx buffer avalible flag            */
  90. } SER_IsrObj;
  91.  
  92. /* data structure type define for serial driver user paramsters data object */
  93. typedef struct
  94. {
  95.     Bool        tx_only;        /* bool for only using tx opperations    */
  96.     Bool        rx_only;        /* bool for only using rx opperations    */
  97.     Uns            chan_id;        /* which serial channel is being used    */
  98.     Uns            tx_size;        /* size of buffers to put                */
  99.     Uns            rx_size;        /* size of buffers to get                */
  100.        Bool        tx_clk_comp;     /* bool for SER tx clock compensation      */
  101.     Bool        rx_clk_comp;       /* bool for SER rx clock compensation   */
  102.     Uns            rx_clk_cnt;        /* clock compensation rx frame count    */
  103.     Uns            tx_clk_cnt;        /* clock compensation tx frame count    */
  104.     SER_Regs    ser_regs;        /* C3x serial port data structure        */
  105. } SER_Attrs;
  106.  
  107. /* data structure type define for serial port driver data object */
  108. typedef struct
  109. {
  110.     Uns            port;            /* which C3x serail port is being used    */
  111.     Bool        rx_first;        /* flag for first call to SER_get()        */
  112.     Bool        tx_first;        /* flag for first call to SER_put()        */
  113.     SER_Attrs    attrs;            /* user configurable parameters            */ 
  114.     SER_IsrObj    rx_obj;            /* rx Isr data structure                */
  115.     SER_IsrObj    tx_obj;            /* tx Isr data structure                */
  116. } SER_DriverObj;
  117. typedef SER_DriverObj *SER_Driver;    
  118.  
  119. extern Void null_isr(Void);
  120. extern Void set_isr(Uns vector, Void isr(Void), Arg argument);
  121. extern Void fix_buffer(Ptr buffer, Uns size);
  122. extern Void float_buffer(Ptr buffer, Uns size);
  123. extern Void scale_buffer(Float *input, Float *output, Uns size, Float scale);
  124. extern Void enable_int(Uns mask);
  125. extern Void prime_int(Uns mask);
  126. extern Void disable_int(Uns mask);
  127. extern Void global_enable(Bool flag);
  128.  
  129. #define AIC_getattrs(AICOBJ, AICATTRS) (*(AICATTRS) = (AICOBJ)->attrs)
  130. #define AIC_setattrs(AICOBJ, AICATTRS) ((AICOBJ)->attrs = *(AICATTRS)) 
  131. extern AIC_Attrs AIC_ATTRS;
  132. extern AIC_Driver AIC_create(AIC_Attrs *attrs);
  133. extern Void AIC_delete(AIC_Driver driver);
  134. extern Bool AIC_get(AIC_Driver driver, Ptr *buffer);
  135. extern Bool AIC_put(AIC_Driver driver, Ptr *buffer);
  136. extern Void AIC_tx_isr(Void);
  137. extern Void AIC_rx_isr(Void);
  138. extern Void AIC_both_isr(Void);
  139.  
  140. #define SER_getattrs(SEROBJ, SERATTRS) (*(SERATTRS) = (SEROBJ)->attrs)
  141. #define SER_setattrs(SEROBJ, SERATTRS) ((SEROBJ)->attrs = *(SERATTRS)) 
  142. extern SER_Attrs SER_ATTRS;
  143. extern SER_Driver SER_create(SER_Attrs *attrs);
  144. extern Void SER_delete(SER_Driver driver);
  145. extern Bool SER_get(SER_Driver driver, Ptr *buffer);
  146. extern Bool SER_put(SER_Driver driver, Ptr *buffer);
  147. extern Void SER_tx_isr(Void);
  148. extern Void SER_rx_isr(Void);
  149. extern Void SER_link_AIC(SER_Driver ser_drv, AIC_Driver aic_drv, SER_Attrs *attrs);
  150.  
  151. #endif /* _DRIVERS_ */
  152.  
  153.